package com.dd.cloud.common.enums;

import com.dd.cloud.common.vo.EnumResultVo;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

/**
 * @author zk
 */
@Getter
@NoArgsConstructor
@AllArgsConstructor
public enum ZkExceptionEnum implements ExceptionEnumInterface {
    ACCOUNT_NOT_FOUND(400, "账号不存在"),
    USER_ID_NOT_FOUND(400, "用户id不存在"),
    ACCOUNT_IS_EXISTS(400, "账号已存在"),
    MECHAN_NOT_FOUND(400, "机构不存在"),
    MECHAN_IS_FOUND(400, "机构已存在"),
    ACCOUNT_IS_DELETED(400, "账号已删除"),
    MEMBER_NOT_FOUND(400, "会员账号不存在"),
    PHONE_IS_EXISTS(400, "手机号已存在"),
    PHONE_IS_NOT_EXISTS(400, "手机号不存在"),
    DETAIL_NOT_FOUND(400, "账号详细信息不存在"),
    ACCOUNT_IS_FORBIDDEN(400, "账号被禁用"),
    STATUS_DATA_ERROR(400, "状态数据错误"),
    PARAM_DATA_ERROR(400, "参数数据不合法"),
    TYPE_DATA_ERROR(400, "类型数据错误"),

    PARAMETER_ERROR(400, "参数异常：%s"),
    DATA_ERROR(400, "数据异常：%s"),
    //通用异常
    GENERAL_ERROR(400, "%s"),

    ORDER_NOT_FOUND(400, "订单不存在"),
    ORDER_CAN_NOT_REFUND(400, "当前订单不是已支付状态,不能退款"),
    REFUND_ERROR(500, "退款失败, 原因:%s"),

    PAY_ERROR(500, "生成订单失败, 原因:%s"),
    CANCEL_PRES_ERROR(500, "取消处方失败, 原因：%s"),


    APPLET_LOGIN_ERROR(500, "小程序登录失败, 原因：%s"),
    WECHAT_LOGIN_ERROR(500, "微信登录失败, 原因：%s"),
    WECHAT_PUBLIC_LOGIN_ERROR(500, "微信公众号登录失败, 原因：%s"),


    UPDATE_ERROR(500, "修改失败"),
    DEL_ERROR(500, "删除失败"),
    REVIEW_ERROR(500, "更新失败"),
    ADD_ERROR(500, "添加失败"),
    OPER_ERROR(500, "操作异常！"),

    INVALID_USERNAME_PASSWORD(400, "账号或密码错误"),
    OLD_PSW_IS_NOT_CONRRECT(400, "密码错误"),
    INVALID_VERIFY_CODE(400, "验证码校验失败"),
    POST_BODY_ERROR(400, "POST请求body数据解析错误"),
    FILE_NOT_BE_NULL(400, "文件不能为空"),
    FILE_DOWNLOAD_ERR(500, "文件下载失败"),
    FILES_NOT_BE_NULL(400, "文件数组不能为空"),
    CONTENT_TYPE_ERROE(400, "文件类型无效"),
    INVALID_IMAGE_ERROE(400, "文件内容无效"),
    UPLOAD_FAILED_ERROE(400, "文件上传失败"),
    WX_USER_INFO_FAIL(400, "获取微信信息失败"),
    NO_ERMSSION(400, "你没有这个权限"),
    UNKNOWN_URL(400, "未注册的url,请联系管理员配置菜单url后使用"),
    PLAT_CONTENT_IS_NULL(400, "第三方登录信息为空"),

    REQUEST_FREQUENT(404, "请求太频繁了，请稍后重试"),
    LOGIN_AGAIN(403, "请重新登录"),
    LOGIN_PARSING_ERROR(403, "身份解析失败，请重新登录"),
    LOGIN_ELSEWHERE(403, "已下线，您的账号在其他地方登录"),

    VISIT_OFTEN(402, "访问太频繁了, 休息一会"),
    REQUEST_REPEAT(402, "已提交请求, 请稍后"),

    SYSTEM_EXCEPTION(500, "服务构建中，请稍后重试"),
    PARMAS_ENCRYPT_EXCEPTION(400, "此服务数据需要加密, 请联系接口提供方"),
    HAS_BLOCK_KEYWORD(400, "数据含有非法词, 请修改后重试");
    private int code;
    private String msg;

    /**
     * 返回异常信息
     *
     * @return
     */
    @Override
    public EnumResultVo getMessage() {
        ZkExceptionEnum zkExceptionEnum = ZkExceptionEnum.valueOf(this.name());
        return new EnumResultVo(zkExceptionEnum.code, zkExceptionEnum.msg);
    }

    /**
     * 设置补充异常信息
     *
     * @param msg
     */
    @Override
    public String setMessage(String msg) {
        ZkExceptionEnum zkExceptionEnum = ZkExceptionEnum.valueOf(this.name());
        return String.format(zkExceptionEnum.getMsg(), msg);
    }
}
